This function is used to send either normal or expedited data. _ffff_dddd
identifies the local transport endpoint over which data should be sent,
_bbbb_uuuu_ffff points to the user data, _nnnn_bbbb_yyyy_tttt_eeee_ssss specifies the number of bytes of user
data to be sent, and _ffff_llll_aaaa_gggg_ssss specifies any optional flags described below.
By default, _tttt______ssss_nnnn_dddd operates in synchronous mode and may wait if flow
control restrictions prevent the data from being accepted by the local
transport provider at the time the call is made. However, if _OOOO______NNNN_DDDD_EEEE_LLLL_AAAA_YYYY or
_OOOO______NNNN_OOOO_NNNN_BBBB_LLLL_OOOO_CCCC_KKKK is set (via _tttt______oooo_pppp_eeee_nnnn or _ffff_cccc_nnnn_tttt_llll), _tttt______ssss_nnnn_dddd will execute in
asynchronous mode, and will fail immediately if there are flow control
restrictions.
Even when there are no flow control restrictions, _tttt______ssss_nnnn_dddd will wait if
_SSSS_TTTT_RRRR_EEEE_AAAA_MMMM_SSSS internal resources are not available, regardless of the state of
_OOOO______NNNN_DDDD_EEEE_LLLL_AAAA_YYYY or _OOOO______NNNN_OOOO_NNNN_BBBB_LLLL_OOOO_CCCC_KKKK.
On successful completion, _tttt______ssss_nnnn_dddd returns the number of bytes accepted by
the transport provider. Normally this will equal the number of bytes
specified in _nnnn_bbbb_yyyy_tttt_eeee_ssss. However, if _OOOO______NNNN_DDDD_EEEE_LLLL_AAAA_YYYY or _OOOO______NNNN_OOOO_NNNN_BBBB_LLLL_OOOO_CCCC_KKKK is set, it is
possible that only part of the data will be accepted by the transport
provider. In this case, _tttt______ssss_nnnn_dddd will set _TTTT______MMMM_OOOO_RRRR_EEEE for the data that was sent
(see below) and will return a value less than _nnnn_bbbb_yyyy_tttt_eeee_ssss. If _nnnn_bbbb_yyyy_tttt_eeee_ssss is zero
and sending of zero bytes is not supported by the underlying transport
provider, _tttt______ssss_nnnn_dddd() will return -1 with _tttt______eeee_rrrr_rrrr_nnnn_oooo set to _TTTT_BBBB_AAAA_DDDD_DDDD_AAAA_TTTT_AAAA. A return
value of zero indicates that the request to send a zero-length data
message was sent to the provider.
If _TTTT______EEEE_XXXX_PPPP_EEEE_DDDD_IIII_TTTT_EEEE_DDDD is set in _ffff_llll_aaaa_gggg_ssss, the data will be sent as expedited data,
and will be subject to the interpretations of the transport provider.
If _TTTT______MMMM_OOOO_RRRR_EEEE is set in _ffff_llll_aaaa_gggg_ssss, or is set as described above, an indication is
sent to the transport provider that the transport service data unit
(_TTTT_SSSS_DDDD_UUUU) or expedited transport service data unit (_EEEE_TTTT_SSSS_DDDD_UUUU) is being sent
through multiple _tttt______ssss_nnnn_dddd calls. Each _tttt______ssss_nnnn_dddd with the _TTTT______MMMM_OOOO_RRRR_EEEE flag set
indicates that another _tttt______ssss_nnnn_dddd will follow with more data for the current
_TTTT_SSSS_DDDD_UUUU. The end of the _TTTT_SSSS_DDDD_UUUU (or _EEEE_TTTT_SSSS_DDDD_UUUU) is identified by a _tttt______ssss_nnnn_dddd call with
the _TTTT______MMMM_OOOO_RRRR_EEEE flag not set. Use of _TTTT______MMMM_OOOO_RRRR_EEEE enables a user to break up large
logical data units without losing the boundaries of those units at the
other end of the connection. The flag implies nothing about how the data
is packaged for transfer below the transport interface. If the transport
provider does not support the concept of a _TTTT_SSSS_DDDD_UUUU as indicated in the _iiii_nnnn_ffff_oooo
argument on return from _tttt______oooo_pppp_eeee_nnnn or _tttt______gggg_eeee_tttt_iiii_nnnn_ffff_oooo, the _TTTT______MMMM_OOOO_RRRR_EEEE flag is not
meaningful and should be ignored.
The size of each _TTTT_SSSS_DDDD_UUUU or _EEEE_TTTT_SSSS_DDDD_UUUU must not exceed the limits of the
transport provider as returned by _tttt______oooo_pppp_eeee_nnnn or _tttt______gggg_eeee_tttt_iiii_nnnn_ffff_oooo. If the size is
exceeded, a _TTTT_SSSS_YYYY_SSSS_EEEE_RRRR_RRRR with system error _EEEE_PPPP_RRRR_OOOO_TTTT_OOOO will occur. However, the
_tttt______ssss_nnnn_dddd may not fail because _EEEE_PPPP_RRRR_OOOO_TTTT_OOOO errors may not be reported immediately.
In this case, a subsequent call that accesses the transport endpoint will
fail with the associated _TTTT_SSSS_YYYY_SSSS_EEEE_RRRR_RRRR.
If _tttt______ssss_nnnn_dddd is issued from the _TTTT______IIII_DDDD_LLLL_EEEE state, the provider may silently
discard the data. If _tttt______ssss_nnnn_dddd is issued from any state other than
_TTTT______DDDD_AAAA_TTTT_AAAA_XXXX_FFFF_EEEE_RRRR, _TTTT______IIII_NNNN_RRRR_EEEE_LLLL or _TTTT______IIII_DDDD_LLLL_EEEE, the provider will generate a _TTTT_SSSS_YYYY_SSSS_EEEE_RRRR_RRRR with
system error _EEEE_PPPP_RRRR_OOOO_TTTT_OOOO (which may be reported in the manner described
above).
This function resides within both the X/Open compliant _llll_iiii_bbbb_xxxx_nnnn_eeee_tttt and the
applications which require X/Open compliance must link-load with _----_llll_xxxx_nnnn_eeee_tttt.
Network Services applications which require SVR4 compliance must link-
load with _----_llll_nnnn_ssss_llll.
On failure, _tttt______eeee_rrrr_rrrr_nnnn_oooo may be set to one of the following:
_TTTT_BBBB_AAAA_DDDD_FFFF The specified file descriptor does not refer to a
transport endpoint.
_TTTT_FFFF_LLLL_OOOO_WWWW _OOOO______NNNN_DDDD_EEEE_LLLL_AAAA_YYYY or _OOOO______NNNN_OOOO_NNNN_BBBB_LLLL_OOOO_CCCC_KKKK was set, but the flow control
mechanism prevented the transport provider from
accepting data at this time.
_TTTT_NNNN_OOOO_TTTT_SSSS_UUUU_PPPP_PPPP_OOOO_RRRR_TTTT This function is not supported by the underlying
transport provider.
_TTTT_SSSS_YYYY_SSSS_EEEE_RRRR_RRRR A system error [see _iiii_nnnn_tttt_rrrr_oooo(2)] has been detected
during execution of this function.
_TTTT_BBBB_AAAA_DDDD_DDDD_AAAA_TTTT_AAAA There are multiple conditions which could cause this
_tttt______eeee_rrrr_rrrr_nnnn_oooo to be generated. One condition is: _nnnn_bbbb_yyyy_tttt_eeee_ssss
is zero and sending zero bytes is not supported by
the transport provider. Another condition is: if
______XXXX_OOOO_PPPP_EEEE_NNNN______SSSS_OOOO_UUUU_RRRR_CCCC_EEEE is defined and a single send was
attempted specifying a _TTTT_SSSS_DDDD_UUUU greater than that
specified by the current values of the _TTTT_SSSS_DDDD_UUUU field in
the _iiii_nnnn_ffff_oooo argument.
_TTTT_OOOO_UUUU_TTTT_SSSS_TTTT_AAAA_TTTT_EEEE If ______XXXX_OOOO_PPPP_EEEE_NNNN______SSSS_OOOO_UUUU_RRRR_CCCC_EEEE is defined and _tttt______ssss_nnnn_dddd() is issued in
the wrong sequence on the transport endpoint
referenced by _ffff_dddd, the _TTTT_OOOO_UUUU_TTTT_SSSS_TTTT_AAAA_TTTT_EEEE error value is
returned within the variable _tttt______eeee_rrrr_rrrr_nnnn_oooo.